package cc.owoo.godpen.analysis.html;

import java.util.HashMap;

/**
 * 元素映射表
 * Created by 摸鱼
 * 2022/05/25 下午 06:22
 */
class ElementMap {
    private final ElementList NULL_LIST = new ElementList();// 空列表
    private final HashMap<String, ElementList> map = new HashMap<>();
    private final ElementType type;

    public enum ElementType {
        ELEMENT,
        ELEMENT_CHILD
    }

    public ElementMap(ElementType type) {
        this.type = type;
    }

    /**
     * 获取元素列表
     *
     * @param key 键
     * @return 元素列表对象
     */
    public ElementList get(String key) {
        if (key == null)
            return NULL_LIST;
        if ((key = key.trim().toLowerCase()).length() == 0)
            return NULL_LIST;
        ElementList elements = map.get(key);
        return elements == null ? NULL_LIST : elements;
    }

    /**
     * 添加元素
     *
     * @param key   元素数组集合名称
     * @param value 元素对象
     */
    public void add(String key, Element value) {
        if (key == null || value == null || (key = key.trim().toLowerCase()).length() == 0)
            return;
        map.computeIfAbsent(key, (a) -> createList()).add(value);
    }

    /**
     * 删除元素
     *
     * @param key   元素数组集合名称
     * @param value 需要删除的元素
     * @return 是否删除成功
     */
    public boolean remove(String key, Element value) {
        if (key == null || value == null || (key = key.trim().toLowerCase()).length() == 0)
            return false;
        ElementList list = get(key);
        if (list == null)
            return false;
        return list.remove(value);
    }

    /**
     * 根据元素列表类型创建元素列表
     *
     * @return 元素列表对象
     */
    private ElementList createList() {
        return type == ElementType.ELEMENT_CHILD ? new ElementChildList() : new ElementList();
    }
}
